#include <stdio.h>
#include <stdlib.h>

struct node {
    int data;
    struct node *next;
};

void reverse(struct node **head_ref) {
    struct node *prev = NULL;
    struct node *current = *head_ref;
    struct node *next = NULL;

    while (current != NULL) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    *head_ref = prev;
}

void push(struct node **head_ref, int new_data) {
    struct node *new_node = (struct node*) malloc(sizeof(struct node));
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}

void printList(struct node *node) {
    while (node != NULL) {
        printf("%d ", node->data);
        node = node->next;
    }
}

int main() {
    struct node *head = NULL;
    push(&head, 1);
    push(&head, 2);
    push(&head, 3);
    push(&head, 4);
    push(&head, 5);

    printf("原始链表: \n");
    printList(head);

    reverse(&head);

    puts("");
    printf("翻转后的链表: \n");
    printList(head);

    return 0;
}